草庐IT

Android ArrayList迭代

全部标签

c++ - C++中的多态迭代器

我正在尝试在C++中实现多态迭代器。基本上,我需要它才能应用过滤器,以便迭代器根据相关条件跳过一些项目。所以我做了一个GoF-like具有抽象接口(interface)的迭代器,这允许我从中派生过滤迭代器并实现所需的逻辑。我也更喜欢基于接口(interface)的迭代器而不是模板迭代器,因为它们允许隐藏实现而不会导致困惑的鸭子类型模板。但是,多态迭代器不能按值返回(与STL迭代器相反),所以我必须传递指针,这很容易变得危险,就像在这种情况下一样,这看起来合乎逻辑但会导致内存泄漏:Iter*Collection::GetIter(){...}//newIterImplDoSomethin

c++ - 列表中倒数第二个元素的迭代器

我目前有以下for循环:for(list::iteratorjt=it->begin();jt!=it->end()-1;jt++)我有一个字符串列表,它在一个更大的列表中(list>)。我想遍历内部列表的内容,直到到达倒数第二个元素。这是因为我已经处理了final元素的内容,没有理由再处理了。但是,使用it->end()-1无效--我不能使用-运营商在这里。虽然我可以使用--运算符,这将在每个循环中递减这个最终迭代器。我相信STL列表是一个双向链表,所以从我的角度来看,应该可以做到这一点。建议?提前致谢 最佳答案 使用标准库的必备

c++ - 列表中倒数第二个元素的迭代器

我目前有以下for循环:for(list::iteratorjt=it->begin();jt!=it->end()-1;jt++)我有一个字符串列表,它在一个更大的列表中(list>)。我想遍历内部列表的内容,直到到达倒数第二个元素。这是因为我已经处理了final元素的内容,没有理由再处理了。但是,使用it->end()-1无效--我不能使用-运营商在这里。虽然我可以使用--运算符,这将在每个循环中递减这个最终迭代器。我相信STL列表是一个双向链表,所以从我的角度来看,应该可以做到这一点。建议?提前致谢 最佳答案 使用标准库的必备

c++ - std::copy 如何与流迭代器一起工作

通常的STL构造是:vectorcol;copy(istream_iterator(cin),istream_iterator(),back_inserter(col));我们使用istream_iterator从std输入(cin)复制到vector。谁能解释这段代码是如何工作的?我的问题是我不太了解这部分:istream_iterator(cin),istream_iterator() 最佳答案 首先,请注意,在这种情况下,根本不需要使用std::copy。您可以直接从迭代器初始化vector:vectorcol((istrea

c++ - std::copy 如何与流迭代器一起工作

通常的STL构造是:vectorcol;copy(istream_iterator(cin),istream_iterator(),back_inserter(col));我们使用istream_iterator从std输入(cin)复制到vector。谁能解释这段代码是如何工作的?我的问题是我不太了解这部分:istream_iterator(cin),istream_iterator() 最佳答案 首先,请注意,在这种情况下,根本不需要使用std::copy。您可以直接从迭代器初始化vector:vectorcol((istrea

c++ - 从迭代器返回对象的引用

我想从vector中返回一个对象的引用,并且该对象在一个迭代器对象中。我该怎么做?我尝试了以下方法:Customer&CustomerDB::getCustomerById(conststring&id){vector::iteratori;for(i=customerList.begin();i!=customerList.end()&&!(i->getId()==id);++i);if(i!=customerList.end())return*i;//isthiscorrect?elsereturn0;//gettingerrorhere,cantreturn0asreferenc

c++ - 从迭代器返回对象的引用

我想从vector中返回一个对象的引用,并且该对象在一个迭代器对象中。我该怎么做?我尝试了以下方法:Customer&CustomerDB::getCustomerById(conststring&id){vector::iteratori;for(i=customerList.begin();i!=customerList.end()&&!(i->getId()==id);++i);if(i!=customerList.end())return*i;//isthiscorrect?elsereturn0;//gettingerrorhere,cantreturn0asreferenc

c++ - 对于具有线性存储的容器,可以使用原始指针而不是具有 STL 算法的迭代器吗?

我有一个自定义vector容器,它在内部存储项目一个线性数组。昨晚,我试图为我的类实现自定义迭代器,以便能够将它们与STL算法一起使用。我取得了一些成功,您可以在这里看到:Liveexamplewithcustomiterators这样做时,我发现我只能将原始指针传递给STL算法,它们似乎工作正常。这是没有任何迭代器的示例:#include#include#include#includetemplateclassmy_array{T*data_;std::size_tsize_;public:my_array():data_(NULL),size_(0){}my_array(std::

c++ - 对于具有线性存储的容器,可以使用原始指针而不是具有 STL 算法的迭代器吗?

我有一个自定义vector容器,它在内部存储项目一个线性数组。昨晚,我试图为我的类实现自定义迭代器,以便能够将它们与STL算法一起使用。我取得了一些成功,您可以在这里看到:Liveexamplewithcustomiterators这样做时,我发现我只能将原始指针传递给STL算法,它们似乎工作正常。这是没有任何迭代器的示例:#include#include#include#includetemplateclassmy_array{T*data_;std::size_tsize_;public:my_array():data_(NULL),size_(0){}my_array(std::

c++ - 我们可以在没有 'advance' 函数的情况下增加迭代器多个位置吗?

我知道我们可以使用advance()函数来增加迭代器。我们还使用iterator++将迭代器增加一位。为什么我们不能使用it+=2?intmain(){listl1{1,2,3,5,6};listl2{2,6,8};autoit=l1.begin();advance(it,2);//worksit++;//works//it+=2;//notworkl2.splice(l2.begin(),l1,it);for(inta:l2)cout你可以运行上面的代码here. 最佳答案 operator+=仅受RandomAccessIter